package com.spring.demo8.eg1.factory;

import org.springframework.lang.Nullable;

/**
 * AttributeAccessor接口:属性访问接口
 * <p>
 * BeanDefinition继承的接口之一
 * 这个接口相当于key->value数据结构的一种操作，BeanDefinition继承这个，内部实际上是使用了LinkedHashMap
 * 来实现这个接口中的所有方法，通常我们通过这些方法来保存BeanDefinition定义过程中产生的一些附加信息。
 *
 * @author vhans
 */
public interface MyAttributeAccessor {
    /**
     * 设置属性值:name->值
     */
    void setAttribute(String name, @Nullable Object value);

    /**
     * 获取某个属性对应的值
     */
    @Nullable
    Object getAttribute(String name);

    /**
     * 移除某个属性
     */
    @Nullable
    Object removeAttribute(String name);

    /**
     * 是否包含某个属性
     */
    boolean hasAttribute(String name);

    /**
     * 返回所有属性的名称列表
     */
    String[] attributeNames();
}
